/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dvd.modeles;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import javax.persistence.*;

@Entity
public class Commande implements Serializable {

    String dateCommande;
    double totalCommande;
    double fraisPort;
    @ManyToOne(targetEntity = Utilisateur.class)
    @JoinColumn(name = "UTILISATEUR_ID", nullable = false)
    private Utilisateur utilisateur;
    @OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER, mappedBy = "commande", targetEntity = LigneCommande.class, orphanRemoval = false)
    private Collection<LigneCommande> lignesCommandes = new ArrayList<LigneCommande>();
    
    String nom;
    String prenom;
    String adresse;
    String codepostal;
    String ville;
    

    public Commande(Utilisateur u, Panier panier, String nom, String prenom, String adresse, String codepostal, String ville) 
    {
        this.utilisateur = u;
        totalCommande = panier.getTotalFraisDePort();     
        this.nom = nom;
        this.prenom = prenom;
        this.adresse = adresse;
        this.codepostal = codepostal;
        this.ville = ville;
        
        //enregistrement de la date du jour
        String format = "dd/MM/yy H:mm:ss";
        SimpleDateFormat formater = new SimpleDateFormat(format);
        Date date = new Date();
        dateCommande = formater.format(date);
        
    }

    public Commande() {
    }

    public void addLigneCommande(LignePanier lp) {
        lignesCommandes.add(new LigneCommande(this, lp.getFilm(), lp.getQuantite(), lp.getPrix()));
    }
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Commande)) {
            return false;
        }
        Commande other = (Commande) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "dvd.modeles.Commande[ id=" + id + " ]";
    }

    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public String getCodepostal() {
        return codepostal;
    }

    public void setCodepostal(String codepostal) {
        this.codepostal = codepostal;
    }

    public String getDateCommande() {
        return dateCommande;
    }

    public void setDateCommande(String dateCommande) {
        this.dateCommande = dateCommande;
    }

    public Collection<LigneCommande> getLignesCommandes() {
        return lignesCommandes;
    }

    public void setLignesCommandes(Collection<LigneCommande> lignesCommandes) {
        this.lignesCommandes = lignesCommandes;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public double getTotalCommande() {
        return totalCommande;
    }

    public void setTotalCommande(double totalCommande) {
        this.totalCommande = totalCommande;
    }

    public Utilisateur getUtilisateur() {
        return utilisateur;
    }

    public void setUtilisateur(Utilisateur utilisateur) {
        this.utilisateur = utilisateur;
    }

    public String getVille() {
        return ville;
    }

    public void setVille(String ville) {
        this.ville = ville;
    }

    public double getFraisPort() {
        return fraisPort;
    }

    public void setFraisPort(double fraisPort) {
        this.fraisPort = fraisPort;
    }
    
     public double getTotalFraisDePort() {
        double res = 0.00;
        double fdp = 2.90;
        res = this.getTotalCommande() + fdp;
        // permet d'arrondir à 2 chiffres après la virgule
        res *= 100;
        res = Math.ceil(res);
        res /= 100;

        return res;
    }
    
}
